One of the biggest issues in configuration of enterprise and other applications is to ensure optimal performance given the hardware and software platform they are deployed on throughout the life cycle of the application. While application tuning can be done during the initial installation, such tuning can be rendered useless throughout the life-cycle of the application by the fact that the nature of the data may change. In addition, many variables may force an application to be configured in a way that results in less than optimal performance.
Processes, such as enterprise applications, can contain numerable configurable parameters, resulting in large numbers of possible configurations. Determining which configuration will produce the best desired performance under a particular usage pattern is a difficult problem that often requires intricate knowledge of the complex interdependencies among the various parameters under different workloads. In many contexts, this requires expertise in enterprise application tuning. The acquisition of this expertise can be not only nontrivial, but also time-consuming. In addition, because an application may have different optimal performance points, tuning an application based on workload type and tuning an application instance are two different problems since the performance of an application instance likely depends on its state.
One way to tune an application is to perform experiments that measure how the application performs when configured with different configurations. An application, however, takes time to test and, while being tested, the application may utilize computing resources that could be used for other purposes. Due to the large number of configurations, budgets and resources may not allow for the testing of all configurations.